#pragma once

#include "Adaptor3d_Curve.hxx"
#include "TopoDS_Wire.hxx"
#include "TCollection_ExtendedString.hxx"


namespace occ_utility {
	Standard_Boolean IsLinearCurve(const Adaptor3d_Curve& theC);

	Standard_Boolean IsLinearEdge(const TopoDS_Edge& anEdge);

	void PrintEdgeInfo(const TopoDS_Edge& anEdge);

	void PrintFaceInfo(const TopoDS_Face& aFace);

	void PrintWireInfo(const TopoDS_Wire& wire);

	void SaveWiresInfo(std::ofstream& of,
		const TopoDS_Shape& shape,
		int numEdgesMustBe = 0,
		BOOL mustBePlanar = Standard_False);

	void SaveWireInfo(std::ofstream& of, 
		const TopoDS_Wire& wire,
		int index,
		int numEdgesMustBe = 0, 
		BOOL mustBePlanar = Standard_False);

	void SaveEdgeInfo(std::ofstream& of, int index, const TopoDS_Edge& edge);

	TopoDS_Wire FixWire(TopoDS_Wire aWire);

	int EdgeNumOfWire(const TopoDS_Wire& wire);

	TColgp_Array1OfPnt SampleOnWire(const TopoDS_Wire& wire, const int& numPerEdge);

	TCollection_ExtendedString EdgeCodeOfWire(const TopoDS_Wire& wire);

	Standard_Boolean IsPlanarWire(const TopoDS_Wire& wire);

	TCollection_ExtendedString OrientationInfoOfWire(const TopoDS_Wire& wire);
}